import moment from 'moment';
const draft = {
    // 添加本地缓存
  addDraft (username, ccId, templateId, templateData, message = window.gettext('自动保存')) {
        // 防止无法进行存储本地缓存 大约96KB左右的多余空间
    const minDraftLength = 100000;
        // 本地缓存剩余大小
    let remainingLocalStorageSize = 1024 * 1024 * 5 - unescape(encodeURIComponent(JSON.stringify(localStorage))).length;
    let index = 0;

    while (remainingLocalStorageSize < minDraftLength) {
            // 大小不足96KB时清除一部分本地缓存 从最早创建的本地缓存开始删除
      const key = localStorage.key(index++);
      const keyArray = key.split('_');

      if (keyArray.length !== 4) {
        continue;
      }
      localStorage.removeItem(key);
      remainingLocalStorageSize = 1024 * 1024 * 5 - unescape(encodeURIComponent(JSON.stringify(localStorage))).length;
    }
        // 当前时间戳
    const timestamp = new Date().getTime();
        // 当前年月日时分秒时间
    const localTime = moment.unix(timestamp / 1000).format('YYYY-MM-DD HH:mm:ss');
        // 数据
    const descriptionData = {'time': localTime, 'message': message};
        // 存储数据
    const key = [username, ccId, templateId, timestamp].join('_');
        // 超过50个本地缓存需要进行删除
    let draftNumber = 0;
    const localStorageLength = localStorage.length;
    const regex = this.getKeyRegex(username, ccId, templateId);

    for (let index = localStorageLength - 1; index >= 0; index--) {
      const key = localStorage.key(index);
            // 获取key字段的所有切割信息

      if (regex.test(key)) {
        draftNumber++;
        if (draftNumber >= 50) {
          this.deleteDraft(key);
        }
      }
    }
    try {
      localStorage[key] = JSON.stringify({'template': templateData, 'description': descriptionData});
    } catch (e) {
            // 用户浏览器不支持localStorage
    }
  },
    // 删除本地缓存
  deleteDraft (key) {
    try {
      localStorage.removeItem(key);
      return true;
    } catch (e) {
      return false;
    }
  },
    // 用于替换第一次创建模板id为 uuid 的id
  draftReplace (username, ccId, templateId, templateUUID) {
    const regex = this.getKeyRegex(username, ccId, templateUUID);

    for (const key in localStorage) {
            // 获取key字段的所有切割信息
      const keyArray = key.split('_');
            // 切割完的长度应该为4且原先的模板id uuid 时才需要使用
            // username重复的几率比较大放置最后判断

      if (regex.test(key)) {
                // 原先的模板数据
        const draftData = localStorage[key];
                // 将原先信息删除

        localStorage.removeItem(key);
        keyArray[2] = templateId;
                // 重新创建key值
        const newKey = keyArray.join('_');

        localStorage[newKey] = draftData;
      }
    }
  },
    // 获取当前本地缓存
  getDraftArray (username, ccId, templateId) {
    const regex = this.getKeyRegex(username, ccId, templateId);
    const draftArray = [];
    const localStorageLength = localStorage.length;

    for (let index = localStorageLength - 1; index >= 0; index--) {
      const key = localStorage.key(index);

      if (regex.test(key)) {
        draftArray.push({'key': key, 'data': JSON.parse(localStorage[key])});
      }
    }
    return draftArray;
  },
    // 删除没有template_id 的模板
  deleteAllDraftByUUID (username, ccId, uuid) {
    const regex = this.getKeyRegex(username, ccId, uuid);
    const localStorageLength = localStorage.length;

    for (let index = localStorageLength - 1; index >= 0; index--) {
      const key = localStorage.key(index);
            // uuid 需要加上""变为字符串

      if (regex.test(key)) {
        localStorage.removeItem(key);
      }
    }
  },
    // 复制并替换本地缓存（模板克隆时使用）
  copyAndReplaceDraft (username, ccId, templateId, uuid) {
    const regex = this.getKeyRegex(username, ccId, templateId);

    for (const key in localStorage) {
            // 获取key字段的所有切割信息
      const keyArray = key.split('_');

      if (regex.test(key)) {
                // 原先的模板数据
        const draftData = localStorage[key];

        keyArray[2] = uuid;
                // 重新创建key值并进行创建
        const newKey = keyArray.join('_');

        localStorage[newKey] = draftData;
      }
    }
  },
    // 获取最近的一个本地缓存
  getLastDraft (username, ccId, templateId) {
    const localStorageLength = localStorage.length;
        // 动态生成正则表达式
    const regex = this.getKeyRegex(username, ccId, templateId);

    for (let index = localStorageLength - 1; index >= 0; index--) {
      const key = localStorage.key(index);

      if (regex.test(key)) {
        return localStorage[key];
      }
    }
  },
    // 获得正则表达式
  getKeyRegex (username, ccId, templateId) {
    return new RegExp('^' + username + '_' + ccId + '_' + templateId + '_');
  }
};

export default draft;
